#!/usr/bin/python
import re
import math
import random
import sys
import urllib
import string
import os
import os.path
import platform

#Funkcja zamieniacz, zamienia wybrany w path plik tekstowy na liste ktora nadaje sie do odpytywania.
# zwracana lista wyglada tak: [[ ['ang'],[ ['pol1'],['pol2'] ] ],...]

global folder
if platform.system() == "Windows":
    folder = "./slowniki/"
elif platform.system() == "Linux":
    folder = "sdcard/ase/slowniki"
else:
    print "Prosze ustal sobie sciezke"
    folder = "./slowniki/"
#dla androida sdcard/ase/slowniki
try:
    os.listdir(folder)
except:
    os.mkdir(folder)

def zamieniacz(nazwa_pliku):
    global path
    path = os.path.join(folder,nazwa_pliku)
    print path
    slownik = open(path, "r")
    lista = []
    global dictionary, dictionary1
    dictionary=[]
    dictionary1 =[]
    lista1 = []

    for line in slownik:
        if line[0] != "@":
            strony = re.sub("$\s","",line)
            strony = re.split(" = ", strony)
            lista.append(strony)
        else:
            strony = re.sub("$\s","",line)
            strony = re.split(" = ", strony)
            lista1.append(strony)


    for x in range(len(lista)):
        dictionary.append([])
        for y in range(len(lista[int(x)])):

            dictionary[x].append(lista[x][y].split(" , "))

    for x in range(len(lista1)):
        dictionary1.append([])
        for y in range(len(lista1[int(x)])):

            dictionary1[x].append(lista1[x][y].split(" , "))
    return dictionary



# funkcja losowe, przepytuje z losowo z slownika 'jakisslownik' z polskiego na ang..
# strona,  o co ma pytac, czy o pol(0) czy o ang(1).
def losowe(jakisslownik,strona=1):
    if strona == 1:
        lf = 0
        rg = 1
    elif strona == 0:
        lf = 1
        rg = 0

    zakres = range(0,len(jakisslownik))
    pkt = 0
    prawda = 1
    global usunac
    usunac = []
    innalista =[]
    try:
        while prawda == 1:
            los = random.choice(zakres)
            sys.stdout.write(jakisslownik[los][rg][0]),
            if len(jakisslownik[los][rg]) > 1:
                print odlistuj(jakisslownik[los][rg][1:]),
               # sys.stdout.write(inne),
            sys.stdout.write(": "),
            odp = raw_input("")
            if odp in jakisslownik[los][lf]:
                if len(jakisslownik[los][lf]) > 1:
                    del innalista[:]
                    for x in jakisslownik[los][lf]:
                        innalista.append(x)
                    innalista.remove(odp)
                    g = odlistuj(innalista,"","")
                    print "^ " + g
                zakres.remove(los)
            elif odp == "del":
                usunac.append(los)
                zakres.remove(los)
            elif odp == "exit":
                return exception
            else:
                print "# " + odlistuj(jakisslownik[los][lf],"","")
                pkt += 1

    except:
        print "koniec slowek. Udzieliles %s zlych odpowiedzi, slowek bylo: %s" %(pkt,len(jakisslownik))
        if len(usunac) > 0:
            usun(jakisslownik)

#-------------
# zamienia widok listy na fajny string z nawiasami lub bez
def odlistuj (a, b="(", c=")"):
    x = str(a)
    x = re.sub("[[]",b,x)
    x = re.sub("[]]",c,x)
    x = re.sub("[']","",x)
    return x

def usun(slownik_usun):
    for li in usunac:
        slownik_usun[li][0][0] = "@" + str(slownik_usun[li][0][0])
    zapisz(slownik_usun,dupajasia)

def zapisz(slownik_zapisz,droga):
    bazadanych = open(folder + droga, "w")
    bazadanych.write("")
    bazadanych.close()
    baza1 = open(folder + droga, "a")
    for i in range(0,len(slownik_zapisz)):
        baza =  str(slownik_zapisz[i][0]) +" = "+ str(slownik_zapisz[i][1])
        baza = re.sub("[[]|[]]|'","",baza)
        baza = re.sub(","," ,",baza)
        if i == 0:
            baza1.write(baza)
        else:
            baza1.write("""
"""+baza)
    if slownik_zapisz == "dictionary":
        for i in range(0,len(dictionary1)):
            baza =  str(dictionary1[i][0]) +" = "+ str(dictionary1[i][1])
            baza = re.sub("[[]|[]]|'","",baza)
            baza = re.sub(","," ,",baza)
            baza1.write("""
"""+baza)



#-------------
def dodaj(gdzie_zapisac):
    jeden = 1
    os.path.isfile(folder+gdzie_zapisac)
    while jeden == 1:
        print "Dodaj"
        slowko = raw_input("ang: ")
        if slowko == "":
            jeden = 2
        else:
            tlumaczenie = raw_input("pol: ")
            x = slowko + " = " + tlumaczenie

            if os.path.isfile(folder+gdzie_zapisac) == False:
                slownik = open(folder + gdzie_zapisac, 'w')
                slownik.write(x)

            else:
                slownik = open(folder + gdzie_zapisac, 'a')
                slownik.write("""
"""+x)



#--------------------START-----------------------START------------------
def start():
    print "Witam, co chcesz zrobic? "
    print """1. Odpytaj mnie losowo z polskich
2. Dodaj slowka
3. Dodaj slownik z wordki"""
    ing = input("")
    dirList=os.listdir(folder)

    if ing == 1:
        if len(dirList) < 1:
            print "tu nie ma slownikow, powinienes wybrac 2 i dodac slowka aby stworzyc slownik"
        chwilowa_lista = []
        numerek = 1
        print "-"*20
        for fname in dirList:
            print str(numerek)+". " + fname
            chwilowa_lista.append(fname)
            numerek +=1
        print "-"*20
        jakie_slowka = input("Wybierz slownik [1-"+str(numerek-1)+"]: ")
        global dupajasia
        dupajasia = chwilowa_lista[jakie_slowka-1]
        zamieniacz(dupajasia)
        ########## jezeli chcecie aby was pytal z polskich to linijka ponizej ma wygladac
        #tak losowe(dictionary,0)
        losowe(dictionary)

    elif ing == 2:
        chwilowa_lista = []
        numerek = 1
        print "-"*20
        for fname in dirList:
            print str(numerek)+". " + fname
            chwilowa_lista.append(fname)
            numerek +=1
        print "-"*20
        wybraniec = raw_input("Stworz nowy lub wprowadz liczbe porzadkowa istniejacego: ")

        if wybraniec in string.digits:
            dupajasia = chwilowa_lista[int(wybraniec)-1]
            dodaj(dupajasia)
        else:
            dodaj(wybraniec)

    elif ing == 3:
        wordek = input("Podaj numer strony z wordkami a uczynie ja plikiem: ")
        wordki(wordek)
        zamieniacz(elomelo)
        losowe(dictionary)
#-------------------------------------------------------------------

def wordki(a):
    a = str(a)
    nowalista = []
    global listaa
    listaa=[]
    wordki = urllib.urlopen("http://wordki.pl/angielski/"+a+".html").read()
#tytul ------------------------------------------------------------------
    wordki = string.replace(wordki," ","666")
    tytul = re.findall('<div666id="TytulZestawu">\S+<div',wordki)
    for ghx in tytul:
        ghxx = odkoduj(ghx)
        title = string.replace(ghxx,'<div666id=TytulZestawu>',"")
        titlex = string.replace(title,"666","-")
        title = string.replace(titlex,"-<div","")
        title = title.lower()
    global elomelo
    elomelo = title + ".txt"

#-----------------------------------------------------------------------------
    wordki = re.findall("\S+</td><td>\S+", wordki)
    for x in wordki:
        g =  re.split("</td><td>",x)
        nowalista.append(g)
    nr = 0
    for stuff in nowalista:
        listaa.append([])
        for staff in stuff:
            staff = odkoduj(staff)
            staff = string.replace(staff,"666"," ")
            staff = string.replace(staff,"/",", ")
            staff = staff.lower()
            listaa[nr].append(staff)
        nr += 1
    zapisz(listaa,elomelo)
    #return listaa



def odkoduj(tekst):
    polskie = {"\xc4\x84":"A","\xc4\x86":"C",
"\xc4\x98":"E","\xc5\x81":"L","\xc5\x83":"N","\xc3\x93":"O",
"\xc5\x9a":"S","\xc5\xb9":"Z","\xc5\xbb":"Z","\xc4\x85":"a",
"\xc4\x87":"c","\xc4\x99":"e","\xc5\x82":"l","\xc5\x84":"n",
"\xc3\xB3":"o","\xc5\x9b":"s","\xc5\xba":"z","\xc5\xbc":"z",
"<tr>":"","<td>":"","</tr>":"","</td>":"",'"':""}
    for x in polskie.keys():
        tekst = string.replace(tekst,x,polskie[x])
    return tekst




start()





